/**************************
* @Summary
* @Author 20009200303 赵传博
* @Date 2022/4/27
*****************************/

#ifndef EX4_EXPRNODE_H
#define EX4_EXPRNODE_H
#include "Lexer.h"

//运算结点
class ExprNode {
private:
    Token_type tokType;     //当前结点是数还是运算符
    double value;           //如果是数，把偶才能值

    /* 指向两个孩子结点的指针 */
    ExprNode* left;
    ExprNode* right;

public:
    ExprNode(Token_type tokType, ExprNode* left, ExprNode* right, double value = 0);
    //计算本表达式的值
    double calculate();

    //getters and setters
    ExprNode* getLeft() const { return left; }
    ExprNode* getRight() const { return right; }
    Token_type getTokType() const;
    double getValue() const;
    void setAssignEnd();

    //输出表达式
    void getText_mid();         //中缀
    void getText_postfix();     //后缀
    void getText_prefix();      //前缀

    ~ExprNode();
};


#endif //EX4_EXPRNODE_H
